package com.solution.ascii;

public class Solution {

    public int lengthOfLongestSubstring(String s) {
        int len = s.length();
        int[] last = new int[128];
        for ( int i = 0 ; i < 128 ; i++ )
            last[i] = -1;

        int res = 0, start = 0;  // start 为滑动窗口的起始位置，从1开始计算。以下逻辑需要把数组下标转化
        for ( int i = 0 ; i < len ; i++ ) {
            int index = s.charAt(i);  // 获得当前字符ascii字符十进制数
            start = max( start , last[index] + 1);  // 数组下标转化
            res = max (res, (i + 1) - start);  // 数组下标转化
            last[index] = i;  // 记录当前字符最后一次出现的位置，放在最后是为了不影响start与res的计算。
        }
        return res;
    }

    public int max(int a, int b) {
        return a > b ? a : b;
    }
}
